package com.ytjj.quartz.dao;


import com.ytjj.qmyx.mall.model.Orders;
import com.ytjj.qmyx.mall.model.OrdersPay;
import com.ytjj.qmyx.mall.model.PayConfig;
import com.ytjj.quartz.model.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 
 * @version 1.0
 * 
 */
public interface OrdersDao {
    /**
     * 查询5分钟前未下单订单列表
     *
     * @return
     */
    List<OrdersPay> getWxAppOrdersPayList();
    /**
     * 查询30分钟前未支付微信服务商模式订单列表
     *
     * @return
     */
    List<OrdersPay> getISVWxAppOrdersPayList();

    /**
     * 查询5分钟前为下单的订单列表
     *
     * @return
     */
    List<OrdersPay> getAliPayAppOrdersPayList(@Param("orderNo") String orderNo);

    /**
     * 查询订单信息
     *
     * @param resOrderNo
     * @return
     */
    OrdersPay queryOrdersPayByResOrderNo(@Param("resOrderNo") String resOrderNo);

    /**
     * 获取15分钟前的订单
     *
     * @return
     */
    List<Orders> getOrdersList();

    List<Orders> getOrders();

    /**
     * 获取10分钟前的订单
     *
     * @return
     */
    List<Orders> getOrdersListByTime10();

    PayConfig getPayConfigByCompany(@Param("company") String company,@Param("type") String type,
                                    @Param("tradeType") String tradeType);


    List<Map<String,String>> getUsersList();

    /**
     * 获取当日的订单
     * @return
     */
    List<Orders> selectNowDate();

    /**
     * 根据订单状态获取订单数
     * @param orderStatus
     * @return
     */
    Integer getOrdersByStatus(Integer orderStatus);

    /**
     * 根据平台渠道获取今日已下单数
     * @param orderSource
     * @return
     */
    Integer getPayCountBySource(String orderSource);

    /**
     * 根据平台渠道获取昨日已下单数
     * @param orderSource
     * @return
     */
    Integer getYestPayCountBySource(String orderSource);

    /**
     * 获取昨日app成单数
     *
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getYestAppOrderCount(@Param("startTime") String startTime,
                               @Param("endTime") String endTime);

    /**
     * 获取昨日小程序成单数
     *
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getYestWeappOrderCount(@Param("startTime") String startTime,
                                 @Param("endTime") String endTime);

    /**
     * 获取昨日app订单支付成功数
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getYestAppPayCount(@Param("startTime") String startTime,
                               @Param("endTime") String endTime);

    /**
     * 获取昨日小程序订单支付成功数
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getYestWeappPayCount(@Param("startTime") String startTime,
                               @Param("endTime") String endTime);

    /**
     * 获取昨日App支付订单总金额
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getYestAppPayMoneyAmount(@Param("startTime") String startTime,
                                 @Param("endTime") String endTime);

    /**
     * 获取昨日App支付订单总金额
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getYestWeappPayMoneyAmount(@Param("startTime") String startTime,
                                       @Param("endTime") String endTime);

    /**
     * 获取昨日App订单成本
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getYestAppCostMoneyAmount(@Param("startTime") String startTime,
                                         @Param("endTime") String endTime);

    /**
     * 获取昨日小程序订单成本
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getYestWeappCostMoneyAmount(@Param("startTime") String startTime,
                                         @Param("endTime") String endTime);


    /**
     * 获取昨日订单成单数
     *
     * @param startTime
     * @param endTime
     * @param orderSource
     * @return
     */
    List<PayStatisticsResponse> getOrdersCount(@Param("startTime") String startTime,
                                               @Param("endTime") String endTime,
                                               @Param("orderSource") String orderSource);

    /**
     * 获取昨日订单成单数
     *
     * @param startTime
     * @param endTime
     * @param orderSource
     * @return
     */
    List<PayStatisticsResponse> getRealOrdersCount(@Param("startTime") String startTime,
                                               @Param("endTime") String endTime,
                                               @Param("orderSource") String orderSource);


    /**
     * 获取昨日订单支付成功数
     *
     * @param startTime
     * @param endTime
     * @param orderSource
     * @return
     */
    List<PayStatisticsResponse> getPayOrdersCount(@Param("startTime") String startTime,
                                                  @Param("endTime") String endTime,
                                                  @Param("orderSource") String orderSource);

    /**
     * 昨日支付成功总金额
     *
     * @param startTime
     * @param endTime
     * @param orderSource
     * @return
     */
    List<PayStatisticsResponse> getPayOrdersAmount(@Param("startTime") String startTime,
                                                   @Param("endTime") String endTime,
                                                   @Param("orderSource") String orderSource);

    /**
     * 获取支付金额
     * @param startTime
     * @param endTime
     * @param orderSource
     * @return
     */
    BigDecimal getPayMoney(@Param("startTime") String startTime,
                           @Param("endTime") String endTime,
                           @Param("orderSource") String orderSource);

    List<PayStatisticsResponse> getNoChannelPayOrdersAmount(@Param("startTime") String startTime,
                                                   @Param("endTime") String endTime,
                                                   @Param("orderSource") String orderSource);


    /**
     * 昨日成本总金额
     *
     * @param startTime
     * @param endTime
     * @param orderSource
     * @return
     */
    List<PayStatisticsResponse> getOrdersCostAmount(@Param("startTime") String startTime,
                                                    @Param("endTime") String endTime,
                                                    @Param("orderSource") String orderSource);

    /**
     * 获取成本价
     * @param startTime
     * @param endTime
     * @param orderSource
     * @return
     */
    BigDecimal getCostAmount(@Param("startTime") String startTime,
                             @Param("endTime") String endTime,
                             @Param("orderSource") String orderSource);

    List<PayStatisticsResponse> getNoChanneOrdersCostAmount(@Param("startTime") String startTime,
                                                    @Param("endTime") String endTime,
                                                    @Param("orderSource") String orderSource);


    /**
     * 今日订单总数
     * @param startTime
     * @param endTime
     * @return
     */
    Integer selTodayOrderCount(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 今日销售总额
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal selTodaySaleCount(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     *今日销售商品成本
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getCostPriceToDay(@Param("startTime") String startTime, @Param("endTime") String endTime);

    Integer getForwardUvCount(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 根据订单状态获取订单数
     * @param orderStatus
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getOrderNumByStatus(@Param("orderStatus") Integer orderStatus,
                              @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 根据渠道获取今日支付订单数
     * @param orderSource
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getTodayPayNumBySource(@Param("orderSource") String orderSource,
                                @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 新用户首下单数
     * @param orderSource
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getFirstBugNum(@Param("orderSource") String orderSource,
                           @Param("startTime") String startTime, @Param("endTime") String endTime);



    /**
     * 各个渠道新用户首次下单数
     */
    List<Orders> getFirstBuyNum(@Param("startTime") String startTime,
                                @Param("endTime") String endTime,
                                @Param("orderSource") String orderSource);


    /**
     * @Description 获取电话列表
     *
     * 
     * 
     * @Version 1.0
     **/
    List<OrderMsgResponse> getOrderPhoneList(@Param("time") Integer time);


    /**
     * @Description 获取24小时内的号码信息
     *
     * 
     * 
     * @Version 1.0
     **/
    Integer getOrderPhoneCount(@Param("phone") String phone);

    Integer selectByOrderNo(@Param("orderNo") String orderNo);

    Orders selectOrderByNo(@Param("orderNo") String orderNo);

    List<OrderExpressNoAndOrderNoResponse> queryOrderNoByExpressNo(@Param("expressNos") List<String> expressNos);


    List<OrderResp> queryOrdersByOrderNo();

    Integer updateFlag(Integer orderId);

    List<OrderResp> selectOrderCreateTimeHalfMonthBefore(@Param("ids") List<Integer> ids);

    /**
     * 获取订单的收货时间
     * @param orderId
     */
    List<Date> getOrderReceiveTime(Integer orderId);

    /**
     * 获取订单的发货时间
     * @param orderId
     * @return
     */
    List<Date> getOrderDeliveryTime(Integer orderId);

    List<com.ytjj.quartz.model.OrdersInfo> findOrderAllByStatus();

    boolean updateStatus(OrdersInfo ordersInfo);

    List<Orders> selectByNoIsPay();

    List<com.ytjj.qmyx.mall.model.OrdersInfo> getAllOrdersInfoByOrderId(Integer orderId);
}
